package com.github.cakin.shiro.chapter13.service;

import com.github.cakin.shiro.chapter13.entity.User;

import java.util.Set;

/**
 * @className: UserService
 * @description: 用户服务接口
 * @date: 2020/5/19
 * @author: cakin
 */
public interface UserService {

    /**
     * 功能描述：创建用户
     *
     * @param user 用户
     * @return User 用户
     * @author cakin
     * @date 2020/5/19
     */
    User createUser( User user );

    /**
     * 功能描述：修改密码
     *
     * @param userId      用户id
     * @param newPassword 新密码
     * @author cakin
     * @date 2020/5/19
     */
    void changePassword( Long userId, String newPassword );

    /**
     * 功能描述：添加用户-角色关系
     *
     * @param userId 用户id
     * @param roleIds 角色列表
     * @author cakin
     * @date 2020/5/19
     */
    void correlationRoles( Long userId, Long... roleIds );


    /**
     * 功能描述：移除用户-角色关系
     *
     * @param userId 用户id
     * @param roleIds 角色id列表
     * @author cakin
     * @date 2020/5/19
     */
    void uncorrelationRoles( Long userId, Long... roleIds );

    /**
     * 功能描述：根据用户名查找用户
     *
     * @param username 用户名
     * @return User 用户
     * @author cakin
     * @date 2020/5/19
     */
    User findByUsername( String username );

    /**
     * 功能描述：根据用户名查找其角色
     *
     * @param username 用户名
     * @return Set<String> 介绍集合
     * @author cakin
     * @date 2020/5/19
     */
    Set<String> findRoles( String username );

    /**
     * 功能描述：根据用户名查找其权限
     *
     * @param username 用户名
     * @return Set<String> 权限集合
     * @author cakin
     * @date 2020/5/19
     */
    Set<String> findPermissions( String username );
}
